//#include <iostream.h>
#include "stdio.h"
#include "string.h"

struct defstr
{
    char word[55];
    int end,number,len,maxlen;
}tt[1200];

int n,totend;    


void sort()
{
    int i,j;
    for (i=1;i<n;i++)
    	for (j=i+1;j<=n;j++)
    	{
    	    if (strcmp(tt[i].word,tt[j].word)>0)
    	    {
    	        tt[0]=tt[i];
    	        tt[i]=tt[j];
    	        tt[j]=tt[0];
    	    }    
    	}    
}    

void sort2()
{
    int i,j;
    for (i=1;i<n;i++)
    	for (j=i+1;j<=n;j++)
    	{
    	    if (tt[i].number>tt[j].number)
    	    {
    	        tt[0]=tt[i];
    	        tt[i]=tt[j];
    	        tt[j]=tt[0];
    	    }    
    	}    
}    



main()
{
    int i,j,site,flag,a,b;
    char s[55];
    FILE *in,*out;
    
   // in=freopen("test6\\prefix.in","r",stdin);
  //  out=freopen("b.out","w",stdout);
    
    
    memset(tt,0,sizeof(tt));
    n=0;
    totend=0;
    while (scanf("%s",s)!=EOF)
    {
        n++;
        strcpy(tt[n].word,s);
        tt[n].number=n;
        tt[n].maxlen=strlen(s);
    }    
    
    sort();
    
    for (i=1;i<=n;i++) tt[i].len=1;
    for (i=1;i<=n;i++) tt[i].end=0;
    site=1;
    while (1)
    {
        for (i=1;i<=n;i++)
        {
            if (tt[i].end==1) continue;
            if (tt[i].maxlen<site) 
            {
                tt[i].end=1;
                tt[i].len=site-1;
                totend++;
                continue;
            }
            flag=0; 
            if (site==1)
            {
                if (i>1)
                  if (tt[i].word[site-1]==tt[i-1].word[site-1]&&tt[i-1].end==0&&tt[i-1].maxlen>=site) 
                	flag=1;
            	if (i<n)
                  if (tt[i].word[site-1]==tt[i+1].word[site-1]&&tt[i+1].end==0&&tt[i+1].maxlen>=site) 
                	flag=1;
            }       
            if (i>1)
                  if (tt[i].word[site-2]==tt[i-1].word[site-2]&&tt[i].word[site-1]==tt[i-1].word[site-1]&&tt[i-1].end==0&&tt[i-1].maxlen>=site) 
                	flag=1;
            if (i<n)
                if (tt[i].word[site-2]==tt[i+1].word[site-2]&&tt[i].word[site-1]==tt[i+1].word[site-1]&&tt[i+1].end==0&&tt[i+1].maxlen>=site) 
                	flag=1;
            if (!flag)        
            {
            	tt[i].len=site;    
            	tt[i].end=1;
            	totend++;
            }    
        }    
        
        if (totend==n) break;
        site++;
    }    
    sort2();
    for(i=1;i<=n;i++)
    {
        printf("%s ",tt[i].word);
        for (j=0;j<tt[i].len;j++) printf("%c",tt[i].word[j]);
        printf("\n");
    }    
    
    
    
}    
